window: Remove popovers on dispose() before unsetting focus.
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 13 Jan 2014 11:33:33 +0000 (12:33 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 22 Jan 2014 16:10:06 +0000 (17:10 +0100)
The popovers may return keyboard grabs to previous widgets, so if
called after unsetting the focus, the window may be left with a
dangling GtkWidget that would cause crash at later dispose() calls.

gtk/gtkwindow.c

index 84792c7da0c831ab078d47a138dc3e8a63df4850..d4f6e9810cf069affdab61264091863150e3d77b 100644 (file)
@@ -2664,13 +2664,13 @@ gtk_window_dispose (GObject *object)
   GtkWindow *window = GTK_WINDOW (object);
   GtkWindowPrivate *priv = window->priv;
 
+  g_hash_table_remove_all (priv->popovers);
+
   gtk_window_set_focus (window, NULL);
   gtk_window_set_default (window, NULL);
   unset_titlebar (window);
   remove_attach_widget (window);
 
-  g_hash_table_remove_all (priv->popovers);
-
   G_OBJECT_CLASS (gtk_window_parent_class)->dispose (object);
 }